package negocio;

import java.util.Date;

public class Mensalidade {
	private static final long MILLSECS_PER_DAY = (1000 * 3600 * 24);
	private float valorPrincipal; // valor das cadeiras cursadas
	private Date dataVencimento;
	private Date dataPagamento;
	private int numeroParcelas;
	private float desconto;
	private float juros;
	private float pctBolsa;
	private Aluno aluno;

	public Mensalidade(float valorPrincipal, Date dataVencimento,
			Date dataPagamento, int numeroParcelas, float desconto,
			float juros, float pctBolsa) {
		this.valorPrincipal = valorPrincipal;
		this.dataVencimento = dataVencimento;
		this.dataPagamento = dataPagamento;
		this.numeroParcelas = numeroParcelas;
		this.desconto = 0.10F;
		this.juros = 0.01F;
		this.pctBolsa = pctBolsa;
	}

	public float getValorPrincipal() {
		return valorPrincipal;
	}

	public void setValorPrincipal(float valorPrincipal) {
		this.valorPrincipal = valorPrincipal;
	}

	public Date getDataVencimento() {
		return dataVencimento;
	}

	public void setDataVencimento(Date dataVencimento) {
		this.dataVencimento = dataVencimento;
	}

	public Date getDataPagamento() {
		return dataPagamento;
	}

	public void setDataPagamento(Date dataPagamento) {
		this.dataPagamento = dataPagamento;
	}

	public int getNumeroParcelas() {
		return numeroParcelas;
	}

	public void setNumeroParcelas(int numeroParcelas) {
		this.numeroParcelas = numeroParcelas;
	}

	public float getDesconto() {
		return desconto;
	}

	public void setDesconto(float desconto) {
		this.desconto = desconto;
	}

	public float getJuros() {
		return juros;
	}

	public void setJuros(float juros) {
		this.juros = juros;
	}

	public float getPctBolsa() {
		return pctBolsa;
	}

	public void setPctBolsa(float pctBolsa) {
		this.pctBolsa = pctBolsa;
	}

	public Aluno getAluno() {
		return aluno;
	}

	public void setAluno(Aluno aluno) {
		this.aluno = aluno;
	}

	public float getValorTotal() {
		float valorTotal = 0;
		if (aluno.isBolsista(pctBolsa)) {
			valorPrincipal -= (valorTotal * pctBolsa);
		}

		if (dataPagamento.before(dataVencimento)) {
			valorTotal = valorPrincipal - calcularDesconto();
		}

		if (dataPagamento.after(dataVencimento)) {
			valorTotal = valorPrincipal + calcularJuros();
		}
		return valorTotal;
	}

	private float calcularJuros() {
		long dias = (dataPagamento.getTime() - dataVencimento.getTime())
				/ MILLSECS_PER_DAY;
		return valorPrincipal * (juros * dias);
	}

	private float calcularDesconto() {
		return valorPrincipal * desconto;
	}

}
